#!/bin/env bash

#功能: 进行文本排序
sort 1.txt      #按照ascii值大小排序
sort -u 1.txt   #排序并去重
sort -ur 1.txt  #反向排序

#按照size排序如
#test.txt内容
#1k
#10G
#1M
#1b
#20k
sort -h test.txt
#输出结果为:
#1b
#1k
#20k
#1M
#10G

#按列排序， 样本demo.txt
#123:345
#abc:32
#asa:09
#kl:121
#123:098
sort -k 2 -t: demo.txt  #以:分隔, 按照第二列排序
#输出
#asa:09
#123:098
#kl:121
#abc:32
#123:345

#也可以指定字节范围排序
sort -nk 2,3 demo.txt #列第二和三字节组成的属性列按照数字排序

sort -M month.txt #按照月份排序
sort -C test.txt  #检查文本是否排序
sort -d 1.txt     #按照字典序排序
sort -b 1.txt     #删除行首空格

function func_sort() 
{
    sort -C $*
    if [ $? -eq 0 ]; then
        echo "Sorted"
    else
        echo "Unsorted"
    fi
}

cat 1.txt| sort -  #-表示从标准输入读取内容并排序
cat 1.txt| sort - -o 2.txt #排序结果写入2.txt

#通常情况下sort和uniq一起使用(uniq输入必须是排序的文件内容)
uniq 1.txt #只打印一次重复行
#如果1.txt未排序可以先排序
sort 1.txt | uniq

sort 1.txt | uniq -d #仅显示重复行且重复行只显示一次，非重复行不显示
sort 1.txt | uniq -D #重复行完整显示，非重复行不显示
sort 1.txt | uniq -u #仅仅显示非重复行
sort 1.txt | uniq -c #统计各行出现的次数

sort 1.txt | uniq -s 2 -w 2 #跳过前两个字符开始, 最大字符长度2

#如果和xargs联用, 使用-z参数
uniq -z file.txt | xargs -0 rm #删除文件